#ifndef MAINCONTROLLER_H
#define MAINCONTROLLER_H

#include <QObject>
#include <QStackedWidget>
#include "MainController/toolbarview.h"

#include "Auxiliary/BusinessLogic/adddiluent.h"
#include "SampleAnalysis/View/sampleanalysisform.h"
#include "Settings/View/assistsettingview.h"
#include "Settings/View/departclinicianview.h"
#include "Settings/View/parammicroscopyview.h"
#include "Settings/View/paramresearchview.h"
#include "Settings/View/paramunitsetview.h"
#include "Settings/View/gainsettingview.h"
#include "Settings/View/adduserdialog.h"
#include "Settings/View/communicationsetview.h"
#include "Settings/View/datetimesetview.h"
#include "Settings/View/flagalarmresponse.h"
#include "Settings/View/labinfosetView.h"
#include "Settings/View/maintaintsetview.h"
#include "Settings/View/printsettingview.h"
#include "Settings/View/reagentmanagesetview.h"
#include "Settings/View/usermanagerview.h"
#include "Settings/View/paramreferlimitsview.h"
#include "Calibration/View/ManualCalibrationForm.h"


class MainController : public QObject
{
    Q_OBJECT
public:

    enum WidgetID{
        E_AssistView = 0,
        E_CommuicationView,
        E_DateTimeSetView,
        E_FlagAlarmView,
        E_PrintSetView,
        E_LabInfoSetView,
        E_UserManagerView,
        E_MaintainView,
        E_ReagManageView,
        E_DepartClinicanView,
        E_ParamReferLimitsView,
        E_ParamUnitView,
        E_ParamMicroscopeView,
        E_ParamReserachView,
        E_GainSettingView,
        E_SampleAnalysisView,
        E_AddDiluentDialog,
        E_Reagent,
        E_LJQuailtyControl,
        E_CountReview,
        E_PrintView,
        E_ManualCalibrate
    };

    explicit MainController(QObject *parent = 0);
    ~MainController();
    void setContentWidget(QStackedWidget *contentWidget);
    void setCurrentWidgetID(WidgetID widgetid);
    static MainController *getInstance();


signals:


private:
    QStackedWidget *contentWidget;

    AddUserDialog *addUserDialog;
    AssistsettingView *assistsettingView;
    CommunicationSetView *communicationSetView;
    DateTimeSetView *dateTimeSetView;
    DepartClinicianView *departClinicianView;
    FlagAlarmResponse *flagAlarmResponseView;
    GainSettingView *gainSettingView;
    LabInfoSetView *labInfoSetView;
    MaintaintSetView *maintaintSetView;
    ParamMicroscopyView *paramMicroscopyView;
    ParamResearchView *paramResearchView;
    ParamReferLimitsView * paramReferLimitsView;
    ParamUnitSetView *paramUnitSetView;
    PrintSettingView *printsettingView;
    ReagentManageSetView *reagentManageSetView;
    UserManagerView *userManagerview;

    SampleAnalysisForm *sampleAnalysisForm;
    ManualCalibrationForm *manualCalibrationForm;
    //AddDiluent *addDiluent;
};

#endif // MAINCONTROLLER_H
